class Base:
    # 公共变量，初始化为100
    n1 = 100
    # 私有变量，初始化为200，外部无法直接访问
    __n2 = 200

    def __init__(self):
        # 构造方法，对象创建时自动调用
        print("Base...的构造方法")

    def hi(self):
        # 公共方法，用于打招呼
        print("Base...的hi方法")

    def __hello(self):
        # 私有方法，外部无法直接调用
        print("Base...的__私有hello方法")


class Sub(Base):
    # 子类构造器
    def __init__(self):
        print("sub...的构造方法")

    def say_ok(self):
        # 父类的非私有属性子类可以直接访问到
        print("sub...的say_ok方法", self.n1)

        # print(self.__n2)
        # self.__hello()


sub = Sub()
sub.say_ok()


# python支持多重继承 和Java不同 Java是单继承
# 定义类A，用于存储整数n1
class A:
    n1 = 100
    n2 = 200


# 定义类B，用于存储整数n2
class B:
    n1 = 300
    n2 = 400


# 定义类C，继承自类A和B，从而同时拥有n1和n2两个属性
class C(A, B):
    # pass是一个占位符
    pass


# 创建类C的实例
c = C()

# 访问并打印类C实例c的n1属性
print(c.n1)

# 访问并打印类C实例c的n2属性
print(c.n2)

# 在多重继承中，子类会继承父类的同名属性，左边的父类属性优先级更高
